package com.snopy.socket;

import lombok.extern.slf4j.Slf4j;

import javax.naming.spi.ObjectFactory;

/**
 * @author snopy
 * @version 1.0.0
 * @classname KnockKnockProtocol
 * @description
 * @email 77912204@qq.com
 * @date 2022/08/01 16:06
 */
@Slf4j
public class KnockKnockProtocol {


    private static final int WAITING = 0;
    private static final int SENTKNOCKKNOCK = 1;
    private static final int SENTCLUE = 2;
    private static final int ANOTHER = 3;

    private static final int NUMJOKES = 5;

    private int state = WAITING;
    private int currentJoke = 0;
    private String[] clues = {"Turnip","Little Old Lady","Atch","Who","Who"};

    private String[] answers = { "Turnip the heat, it's cold in here!",
            "I didn't know you could yodel!",
            "Bless you!",
            "Is there an owl in here?",
            "Is there an echo in here?" };
    public String processInput(String theInput){
            String theOutput = null;
            if (state == WAITING){
                theOutput = "Knock!Knock!";
                state = SENTKNOCKKNOCK;
            }else if (state == SENTKNOCKKNOCK){
                if (theInput.equalsIgnoreCase("Who's there?")){
                    theOutput = clues[currentJoke];
                    state = SENTCLUE;
                }else {
                    theOutput = "You're supposed to say \"Who's there?\"! Try again. Knock! Knock!";
                }
            }else if (state == SENTCLUE){
                if (theInput.equalsIgnoreCase(clues[currentJoke] + " who?")){
                    theOutput = answers[currentJoke] + " Want another? (y/n)";
                    state  = ANOTHER;
                }else {
                    theOutput = "You're supposed to say \"" + clues[currentJoke] + " who?\"! Try again. Knock! Knock!";
                }
            } else if (state == ANOTHER) {
                if (theInput.equalsIgnoreCase("y")){
                    theOutput = "Knock! Knock!";
                    if (currentJoke == (NUMJOKES - 1)){
                        currentJoke = 0;
                    }else {
                        currentJoke++;
                        state = SENTKNOCKKNOCK;
                    }
                }else {
                    theOutput = "Bye.";
                    state = WAITING;
                }
            }
            return  theOutput;
    }
}
